package com.torresquintero.oncologos.common.entityUtilities;

import java.util.List;

import javax.persistence.EntityManager;


import com.torresquintero.oncologos.common.factory.FactoryEntityManager;
import com.torresquintero.oncologos.entidades.Paciente;
import com.torresquintero.oncologos.enumeraciones.TipoDocumentoEnum;

/**
 * Clase que implementa las consultas basicas sobre un paciente
 * que se efectuan en toda la aplicacion.
 * @author Camilo Andres
 *
 */
public class PacienteUtilities {

	
	/**
	 * Variable statica para el partron Singleton
	 */
	private static PacienteUtilities pacienteUtilities;
	/**
	 * Administrador de entidades.
	 */
	private static EntityManager em;
		
	/**
	 * Constructor, inicializa el EntityManager.
	 */
	private PacienteUtilities() {
		
		em=(FactoryEntityManager.getEm());
	}
	
	/**
	 * Metodo para obtener una instancia singleton de esta clase.
	 * @return
	 */
	public static PacienteUtilities getInstance(){
		
		if(pacienteUtilities==null){
			pacienteUtilities=new PacienteUtilities();
		}
		return pacienteUtilities;
	}
	
	
	/**
	 * Metodo para buscar un Paciente.
	 * @param cedula cedula del paciente.
	 * @param tipoDoc tipo de documento 
	 */
	public static Paciente buscarPaciente(String cedula,TipoDocumentoEnum tipoDoc){
            em=FactoryEntityManager.getEm();
		List<Paciente> paceientes= em.createNamedQuery(Paciente.FIND_PACIENTE_BY_NUMERO_Y_TIPO_DOCUMENTO_PACIENTE)
		.setParameter(Paciente.PARAMETRO_NUMERO_DOCUMENTO_PACIENTE, cedula).setParameter(Paciente.PARAMETRO_TIPO_DOCUMENTO_PACIENTE,tipoDoc).getResultList();	
                
                if(paceientes.isEmpty()){
                  return null;  
                }else{
                    return paceientes.get(0);
                }
	}
	/**
	 * Metodo para listar todos los pacientes.
	 * @return lista de medicos.
	 */
	public static List<Paciente> listarTodosLosPaciente(){
            em=FactoryEntityManager.getEm();
		return em.createNamedQuery(Paciente.FIND_ALL).getResultList();
	}

	/**
	 * @return the em
	 */
	public EntityManager getEm() {
		return em;
	}

	/**
	 * @param em the em to set
	 */
	public void setEm(EntityManager em) {
		this.em = em;
	}	
}
